Security Incidents Analysis: Global Patterns and Trends
1 Introduction
This page provides a global overview of security incidents using data from the Aid Worker Security Database. We explore geographic and temporal trends and break down key variables used in the dataset to better understand patterns of violence against humanitarian personnel.
The international analysis sets the stage before diving into individual country reports.
2 Dataset Overview
Dataset contains 4314 incidents across 95 countries
Time period covered: 1997 to 2025
3 Global Incident Distribution
Security incidents aren’t distributed evenly across the world. Some regions experience higher concentrations due to various factors including geopolitical tensions, economic disparities, and historical conflicts. Visualizing this distribution helps us identify global patterns.
The map below displays incidents across the globe, with colors indicating the severity based on the number of people affected:
- Blue: No reported casualties
- Green: 1-5 affected individuals
- Orange: 6-20 affected individuals
- Red: More than 20 affected individuals
Clustering is used to manage dense areas where multiple incidents occurred in close proximity.
The interactive map reveals that incidents are highly concentrated in specific regions, especially across parts of Africa and the Middle East.
You can zoom in on specific regions and click on individual markers to get more details about each incident, such as the country, year, total affected, and attack type.
4 Temporal Trends
Security landscapes evolve over time. By examining how incident patterns change year by year, we can identify emerging hotspots and areas where security might be improving.
The animated choropleth map below shows how the distribution of security incidents has shifted over the years. Darker colors indicate higher numbers of incidents.
This visualization reveals several insights:
- The global distribution of security incidents has shifted significantly over time
- Some countries that were previously security hotspots have shown improvement
- New areas of concern have emerged in recent years
- The total number of recorded incidents shows notable year-to-year variation
You can use the play button to animate the map through time, or manually select specific years using the slider.
4.1 Annual Trends at a Glance
The chart below offers a simpler view of yearly totals across all countries, showing how global incident volume has risen over time.
The interactive bar chart shows:
- A general upward trend in reported incidents
- Distinct spikes likely linked to global conflicts or regional escalations
- Possible influence from improved data collection and reporting
Together, these visuals underscore how fluid the security landscape is—and why real-time analysis and localized response strategies matter.
5 Global Breakdown Across Key Variables
Before diving into individual country profiles, we want to first examine global trends across the key variables in the dataset—such as attack type, context, actor involvement, motive, etc. By analyzing these patterns at a global scale, we can establish an overall understanding of how security incidents are documented, what types of information are commonly missing or uncertain, and which trends emerge across countries. This foundation will help us better interpret the nuances of each country’s data in the following sections.
5.1 Types of Injuries and Their Contexts
Understanding how different attack types affect aid workers is crucial for response planning and preparedness. Each method of violence—whether gunfire, explosives, or abduction—carries unique risks and medical implications.
Code
attack_counts = df['means_of_attack'].value_counts().reset_index()
attack_counts.columns = ['Attack Type', 'Count']
attack_counts = attack_counts.sort_values('Count', ascending=False)
fig_attacks = px.bar(
attack_counts,
x='Attack Type',
y='Count',
title='Security Incidents by Attack Type',
height=450
)
fig_attacks.update_traces(marker_color=palette["primary"])
fig_attacks.update_layout(
xaxis_title=None,
yaxis_title="Number of Incidents",
xaxis={'categoryorder': 'total descending', 'tickangle': 45}
)
fig_attacks.show()5.1.1 Common Attack Types
Shooting: Gunfire directed at individuals or vehicles, often during ambushes.
Kidnapping: Abduction for ransom, leverage, or forced cooperation.
Bodily Assault: Physical violence such as beatings.
Aerial Bombardment / Shelling: Explosives from air or artillery that may strike aid targets.
Kidnap-Killing: Abductions ending in execution.
Roadside / Vehicle-borne IEDs: Explosives planted on roads or in cars.
Other Explosives: Includes grenades, landmines, or suicide devices.
5.2 Attack Contexts
Understanding the context of each security incident helps identify common risk environments and inform response planning. Ambushes and individual attacks are among the most frequent, while raids and detentions reflect more organized or prolonged threats. These distinctions guide preparedness strategies, from route planning to physical site protection.
Code
context_counts = df['attack_context'].value_counts().reset_index()
context_counts.columns = ['Attack Context', 'Count']
context_counts = context_counts.sort_values('Count', ascending=False)
fig_context = px.bar(
context_counts,
x='Attack Context',
y='Count',
title='Security Incidents by Attack Context',
height=450
)
fig_context.update_traces(marker_color=palette["primary"])
fig_context.update_layout(
xaxis_title=None,
yaxis_title="Number of Incidents",
xaxis={'categoryorder': 'total descending', 'tickangle': 45}
)
fig_context.show()Combat/Crossfire: Occurs when aid workers are caught between opposing armed groups during active fighting.
Ambush: Sudden, premeditated attacks—often while traveling—posing high risk due to surprise and mobility.
Individual Attack: Targeted violence against specific aid workers, often outside group or convoy settings.
Raid: Coordinated intrusion into compounds or facilities with the intent to steal, intimidate, or harm.
Detention: When personnel are held—formally or informally—by state or non-state actors, sometimes for leverage.
5.3 Nationals vs. Internationals
Aid workers from local communities often face greater risks than their international counterparts. This visualization compares casualties—killed, wounded, and kidnapped—by staff category.
Code
casualties_data = {
'Category': ['Nationals', 'Internationals'],
'Killed': [
df['nationals_killed'].sum(),
df['internationals_killed'].sum()
],
'Wounded': [
df['nationals_wounded'].sum(),
df['internationals_wounded'].sum()
],
'Kidnapped': [
df['nationals_kidnapped'].sum(),
df['internationals_kidnapped'].sum()
]
}
casualties_df = pd.DataFrame(casualties_data)
casualties_long = pd.melt(
casualties_df,
id_vars=['Category'],
value_vars=['Killed', 'Wounded', 'Kidnapped'],
var_name='Status',
value_name='Count'
)
fig_casualties = px.bar(
casualties_long,
x='Category',
y='Count',
color='Status',
title='Casualties by Nationality Category',
barmode='stack',
height=500,
color_discrete_map={
'Killed': palette["danger"],
'Wounded': palette["primary"],
'Kidnapped': palette["secondary"]
}
)
fig_casualties.update_layout(
xaxis_title=None,
yaxis_title="Number of People",
legend_title_text=None,
title={
'text': 'Casualties by Nationality Category',
'y': 0.95, # lower to avoid cutoff
'x': 0.5,
'xanchor': 'center',
'yanchor': 'top',
'font': {'size': 17}
},
margin=dict(t=80) # add top margin
)
fig_casualties.show()Nationals: Local staff face the majority of casualties, likely due to higher numbers, greater exposure, and fewer protective resources.
Internationals: Though better protected, they are often targeted for kidnapping due to political visibility or ransom value.
These differences emphasize the need for inclusive protection strategies tailored to both national and international aid workers.
5.3.1 Factors Contributing to Disparity
- Numbers and Exposure: Locals far outnumber internationals in most areas
- Access to Protection: Internationals often have enhanced security measures and evacuation options
- Targeting Patterns: Some actors specifically avoid targeting internationals due to potential international consequences
- Risk Profiles: Internationals may have more restricted movement in high-threat areas
5.3.2 Kidnapping Trends
- Kidnapping represents a relatively small proportion of overall casualties
- However, internationals face a disproportionate kidnapping risk in many contexts due to:
- Higher perceived ransom value
- Political leverage potential
- Media attention
5.3.3 Location Trends
Certain locations are consistently more vulnerable to security incidents than others. This breakdown highlights where aid workers are most at risk.
Code
context_counts = df['location'].value_counts().reset_index()
context_counts.columns = ['Location', 'Count']
context_counts = context_counts.sort_values('Count', ascending=False)
fig_context = px.bar(
context_counts,
x='Location',
y='Count',
title='Security Incidents by Location',
height=450
)
fig_context.update_traces(marker_color=palette["primary"])
fig_context.update_layout(
xaxis_title=None,
yaxis_title="Number of Incidents",
xaxis={'categoryorder': 'total descending', 'tickangle': 45}
)
fig_context.show()Road: The high number of incidents on roads could be due to several factors, such as more exposure and visibility of potential targets, less controlled environment compared to other locations, vulnerable transportation of valuable goods or information, etc.
Public Locations: These areas are prone to security incidents because high foot traffic increases opportunities for theft or disruption, multiple entry and exit points, or diverse and unpredictable crowd dynamics.
Protect Sites: Despite being designated as protected, these locations still experience incidents.
5.4 Gender Distribution of Affected Individuals
Understanding how security incidents affect different gender groups provides important insights into vulnerability patterns and protection needs.
Code
gender_cols = ['gender_male', 'gender_female']
gender_totals = {
'Gender': ['Male', 'Female'],
'Count': [
df['gender_male'].sum(),
df['gender_female'].sum()
]
}
gender_df = pd.DataFrame(gender_totals)
fig_gender = px.bar(
gender_df,
x='Gender',
y='Count',
title='Gender Distribution of Affected Individuals',
height=450
)
fig_gender.update_traces(marker_color=palette["primary"])
fig_gender.update_layout(
xaxis_title=None,
yaxis_title="Number of Individuals"
)
fig_gender.show()5.4.1 Analysis of Gender Patterns
The gender distribution of individuals affected by security incidents reveals several significant patterns:
5.4.2 Male Predominance
- Males constitute the majority of individuals affected by security incidents
- The disparity may reflect different exposure levels due to gender roles in some contexts
5.4.3 Contributing Factors
- Occupational Exposure: Males may be overrepresented in certain high-risk professions. Armed groups may specifically target men for recruitment, detention, or elimination as potential threats.
- Mobility Patterns: Gender differences in freedom of movement may affect exposure to risks.
- Targeting Patterns: In some contexts, males may be specifically targeted.
- Reporting Biases: Incidents affecting females may be underreported in some settings. This data may underrepresent violence against women, particularly sexual violence, is often underreported in conflict zones due to stigma and limited access to reporting mechanisms.
## Organizations Affected by Security Incidents
Different types of organizations face varying levels of security risk based on their mandates, visibility, and operational contexts.
Code
org_cols = ['un', 'ingo', 'icrc', 'nrcs_and_ifrc', 'nngo', 'other']
if all(col in df.columns for col in org_cols):
org_totals = df[org_cols].sum().reset_index()
org_totals.columns = ['Organization Type', 'Count']
org_labels = {
'un': 'United Nations',
'ingo': 'International NGO',
'icrc': 'Int. Committee of Red Cross',
'nrcs_and_ifrc': 'National Red Cross/Red Crescent',
'nngo': 'National NGO',
'other': 'Other Organizations'
}
org_totals['Organization Type'] = org_totals['Organization Type'].map(org_labels)
org_totals = org_totals.sort_values('Count', ascending=False)
fig_orgs = px.bar(
org_totals,
x='Organization Type',
y='Count',
title='Security Incidents by Organization Type',
height=450
)
fig_orgs.update_traces(marker_color=palette["primary"])
fig_orgs.update_layout(
xaxis_title=None,
yaxis_title="Number of Incidents",
xaxis={'categoryorder': 'total descending', 'tickangle': 45}
)
fig_orgs.show()5.5 Organizational Risk Profiles
Different organizations face varying security risks based on numerous factors:
International NGO: A non-governmental organization that operates across multiple countries, providing humanitarian aid, development support, or advocacy on global issues.
National NGO: A non-governmental organization that operates primarily within a single country, addressing local or national humanitarian, social, or development needs.
United Nations (UN): An international organization made up of member states, working to maintain peace, provide humanitarian aid, and promote human rights and development worldwide.
National Red Cross / Red Crescent: Independent national societies that are part of the International Red Cross and Red Crescent Movement, providing emergency response, disaster relief, and health services within their own countries.
Red Cross: A neutral, impartial humanitarian organization focused on protecting and assisting victims of armed conflict and promoting international humanitarian law.
5.5.1 Security Implications by Organization Type
- Organization-specific protocols: Security measures should be tailored to each organization’s unique risk profile
- Resource allocation: Security resources should be distributed equitably based on risk
- Coordination mechanisms: Inter-organizational security collaboration enhances protection for all
- Training requirements: Staff need organization-specific security training
5.6 Comparison of Actor Types
Understanding which actors are responsible for security incidents helps identify patterns of responsibility and develop appropriate mitigation strategies.
Code
relevant_actors = ['Host state', 'Foreign or coalition forces']
actor_data = df[df['actor_type'].isin(relevant_actors)]
if len(actor_data) > 0:
actor_counts = actor_data['actor_type'].value_counts().reset_index()
actor_counts.columns = ['Actor Type', 'Count']
fig_actors = px.bar(
actor_counts,
x='Actor Type',
y='Count',
title='Host State vs Foreign Actors in Security Incidents',
height=450
)
fig_actors.update_traces(marker_color=palette["primary"])
fig_actors.update_layout(
xaxis_title=None,
yaxis_title="Number of Incidents"
)
fig_actors.show()5.6.1 Analysis of Actor Responsibility
This analysis focuses specifically on two major actor types responsible for security incidents: Host State forces and Foreign/coalition forces. This comparison reveals important patterns:
5.6.2 Host State vs. Foreign Forces
- Host State: The national government or military of the country where a humanitarian operation or conflict is taking place.
- Foreign or Coalition Force: Military forces from one or more countries operating in a foreign nation, often as part of international coalitions or peacekeeping missions.
5.6.3 Implications for Security Planning
- Context-specific approaches: Security strategies should reflect the predominant actor types in each area
- Engagement strategies: Different approaches may be needed when engaging with different security
6 Countries with Most Incidents: All-Time Analysis
First, let’s look at which countries have experienced the most security incidents over the entire period covered by our dataset:
This visualization highlights the countries that have historically been most affected by security incidents. Several factors might contribute to a country appearing on this list:
- Long-standing regional conflicts
- Political instability
- Higher population (which can increase the absolute number of incidents)
- More comprehensive reporting of incidents
7 Countries with Most Incidents: Recent Trends
Historical patterns don’t always reflect current realities. To identify emerging security hotspots, we need to focus on more recent data. The following analysis examines incident patterns over the past 10 years:
This recent trends analysis shows:
- Countries that have experienced deteriorating security situations in the past decade
- An Emerging hotspot (Mali) that did not appear in historical data
By comparing this visualization with the all-time analysis, we can identify significant shifts in global security patterns.
8 Conclusion
This global analysis provides a comprehensive overview of the security challenges faced by humanitarian personnel across time and geography. By breaking down patterns in attack types, contexts, affected demographics, and organizational exposure, we gain insight into the evolving nature of these risks. While some regions remain persistent hotspots, new threats continue to emerge, underscoring the need for real-time monitoring and adaptive security strategies.